﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static List<Student> alist = new List<Student>();
        static void Main(string[] args)
        {
            //第一题：
            //一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //请编写相关代码，
            //1、捕获FormatException异常，并打印输出“异常已处理；
            //2、捕获OverflowException异常，数值超出double范围的异常，并打印输出“异常已处理；
            //3、捕获一般异常Exception异常。
            //4、最终处理finally
            //录入成绩结束后，请输出，总学生数，总分数，平均分。
            Task1();
        }

        private static void Task1()
        {
            float Score = 0;

            for (int i = 0; i < 5; i++)
            {

                try
                {
                    Console.Write("请输入你的名字：");
                    string name = Console.ReadLine();
                    Console.Write("请输入你的成绩：");
                    float S = int.Parse(Console.ReadLine());
                    Score = Score + S;
                    Student a = new Student(name, S);
                    alist.Add(a);
                    Console.WriteLine();

                }
                catch (FormatException)
                {
                    i--;
                    Console.WriteLine("类型转换异常, 已处理,请重新输入这位同学的名字和成绩！");

                }
                catch (OverflowException)
                {
                    i--;
                    Console.WriteLine("超出float范围的异常,已处理,请重新输入这位同学的名字和成绩！");
                }
                catch (Exception)
                {
                    i--;
                    throw;
                }
                finally
                {
                    Console.WriteLine("----------------------------------------------------------");
                }
            }
            Console.WriteLine($"学生总人数：{alist.Count}  学生的总分数：{Score}  学生的平均分：{Score / (alist.Count)}");
        }
    }
}
class Program
{
    static float a;
    static float b;
    static float sum = 1000;
    static void Main(string[] args)
    {

        Task1();
        //第二题：
        //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，
        //另一个值表示用户想要从银行账户中提取的金额。

        //实现存取款功能，
        //用户功能选择：1、存款，2、取款
        //取款时：

        //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException
        //参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”

        //，如此以确保取款金额始终不大于当前余额。
        //操作结束，打印输出余额是多少。
        //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。



    }

    private static void Task1()
    {
        Console.WriteLine("用户功能选择：1、存款，2、取款，3、退出");
        int Key = int.Parse(Console.ReadLine());
        switch (Key)
        {
            case 1:
                Deposit();
                break;
            case 2:
                Take();
                break;
            case 3:
                Environment.Exit(0);
                break;
            default:
                Console.WriteLine("选择错误请重新输入!");
                Task1();
                break;
        }
    }

    private static void Take()
    {

        Console.WriteLine("=================================");
        Console.Write($"您当前金额为{sum}，请输入你要取出的金额：");
        try
        {
            b = float.Parse(Console.ReadLine());
            if (b > sum)
            {
                throw new ArgumentOutOfRangeException("取款金额大于余额，请重新输入!");
            }
            else
            {
                sum = sum - b;
                Console.WriteLine($"您存入的金额为{b}，当前余额为{sum}。");
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            Console.WriteLine("=================================");
        }

        Task1();
    }

    private static void Deposit()
    {
        Console.WriteLine("=================================");
        Console.Write("请输入你要存入的金额：");
        a = float.Parse(Console.ReadLine());
        sum = sum + a;
        Console.WriteLine($"您存入的金额为{a}，当前余额为{sum}。");
        Console.WriteLine("=================================");
        Task1();
    }
}
